// src/request/axios.js

import { useRouter, useRoute } from "vue-router";
import axios from "axios";

// const router = new useRouter();

const api_base_url = "./api";

const instance = axios.create({
  timeout: 1000 * 300,
  baseURL: api_base_url,
});
instance.defaults.responseType = "json";
instance.defaults.withCredentials = true;
instance.defaults.validateStatus = function () {
  // 如果在响应拦截设置了状态码判断，这里设置返回 true
  return true;
};
// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // console.log(config)
    let userInfo = sessionStorage.getItem("token")
    let token = "";
    token = JSON.parse(userInfo)
    if (token != "" && token != undefined) {
      config.headers['Authorization'] = `Bearer ${token}`
    }
    return config;
  },
  (error) => {
    console.log("请求超时！");
    return Promise.reject(error);
  }
);
// 响应拦截器即异常处理
// 服务器 Response 对象
instance.interceptors.response.use(
  (response) => {
    const { headers } = response // 响应头部分
    if (headers.token) {
      sessionStorage.setItem('token', JSON.stringify(headers.token))
    }

  //   const { status } = response // 标准状态码
  //   if (status === 200) { // 如果响应正常则放行 数据
  //       // 如果权限校验失败，退回登录页面
  //       if (data.code == -1) {
  //           Message.error('登录已过期，请重新登录')
  //           router.push({ path: '/login' })
  //           sessionStorage.clear()
  //       }
  //       if (Object.keys(response.data).includes('code')) {
  //           return Promise.resolve(data) //  *响应拦截器，只取数据部分*
  //       }
  //       return Promise.resolve(data) //  *响应拦截器，只取数据部分*
  //   }
  //   if (status >= 400 && status <= 499) {
  //       console.log('客户端请求错误码：', status)
  //       if (Object.keys(response.data).includes('code')) {
  //           return Promise.resolve(data) //  *响应拦截器，只取数据部分*
  //       }
  //       return Promise.resolve(data) //  *响应拦截器，只取数据部分*
  //   }
  //   if (status === 500) {
  //       // 其他错误
  //       if (Object.keys(response.data).includes('code')) {
  //           return Promise.reject(data) //  *响应拦截器，只取数据部分*
  //       }
  //       return Promise.resolve(data) //  *响应拦截器，只取数据部分*
  //   }
  //   if (Object.keys(response.data).includes('code')) {
  //       return Promise.resolve(data) //  *响应拦截器，只取数据部分*
  //   }
    return Promise.resolve(response) //  *响应拦截器，只取数据部分*
  },
  (error) => {
  }
)
const request = {};
request.get = function (url, data) {
  return new Promise((resolve, reject) => {
    instance
      .get(url, { params: data })
      .then((response) => {
        resolve(response);
      })
      .catch((error) => {
        reject(error);
      });
  });
};

request.delete = function (url, data) {
  return new Promise((resolve, reject) => {
    instance
      .delete(url, {
        data,
        headers: {
          "Content-Type": "application/x-www-form-urlencoded",
        },
      })
      .then((response) => {
        resolve(response);
      })
      .catch((error) => {
        reject(error);
      });
  });
};
request.post = function (url, data) {
  return new Promise((resolve, reject) => {
    instance
      .post(url, data, {
        headers: {
          "Content-Type": "application/json;charset=UTF-8",
        },
      })
      .then((response) => {
        resolve(response)
      })
      .catch((error) => {
        reject(error);
      });
  });
};
request.put = function (url, data) {
  return new Promise((resolve, reject) => {
    instance
      .put(url, data)
      .then((res) => {
        resolve(res);
      })
      .catch((err) => {
        reject(err);
      });
  });
};
request.patch = function (url, data) {
  return new Promise((resolve, reject) => {
    instance
      .patch(url, data)
      .then((response) => {
        resolve(response);
      })
      .catch((error) => {
        reject(error);
      });
  });
};
export default request;
